#include "sdl.h"
#include "math.h"
#include "stdlib.h"
#include "sprites.h"
#include "Nucleo.h"
#include "Eventos.h"
#include "pacman.h"
short matrizColision[32][28]={

	{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
	{0,1,1,1,1,1,1,1,1,1,3,1,1,0,0,1,1,1,1,1,1,1,1,1,3,1,1,0},
	{0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0},
	{0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0},
	{0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0},
	{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
	{0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0},
	{0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0},
	{0,1,1,1,3,1,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0},
	{0,0,0,0,0,0,1,0,0,0,0,0,2,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0},
	{0,0,0,0,0,0,1,0,0,0,0,0,2,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0},
	{0,0,0,0,0,0,1,0,0,2,2,2,2,2,2,2,2,2,2,0,0,1,0,0,0,0,0,0},
	{0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0},
	{0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0},
	{4,2,2,2,2,2,1,2,2,2,0,0,0,0,0,0,0,0,2,2,2,1,2,2,2,2,2,4},
	{0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,2,0,0,3,0,0,0,0,0,0},
	{0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0},
	{0,0,0,0,0,0,1,0,0,2,2,2,2,2,2,2,2,2,2,0,0,1,0,0,0,0,0,0},
	{0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0},
	{4,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,4},
	{0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0},
	{0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0},
	{0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0},
	{0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0},
	{0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0},
	{0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0},
	{0,1,1,1,3,1,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,3,1,1,1,1,1,0},
	{0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0},
	{0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0},
	{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
	{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};


Pacman::Pacman()
{


cLectorXml LectorXML;
cLectorSprites LectorSPRITES;

	alto=310;
	ancho=400;


	InicializarPantalla("Pacman",ancho,alto,16,SDL_DOUBLEBUF);//|SDL_FULLSCREEN);


		if(LectorSPRITES.LeerArregloSprites (heroeSprites,"pacman.spr")==0)
		{
			printf("Error al cargar el archivo escenario SPR \n");
	
		}

		if(LectorXML.LeerArchivoXmlPersonaje (heroeAnimacionSprites,"pacman.xml")==0)
		{
			printf("Error al cargar el archivo escenario XML \n");
		}

		if(LectorSPRITES.LeerArregloSprites (fantasmaSprites,"oso.spr")==0)
		{
			printf("Error al cargar el archivo escenario SPR \n");
	
		}

		if(LectorXML.LeerArchivoXmlPersonaje (fantasmaAnimacionSprites,"oso.xml")==0)
		{
			printf("Error al cargar el archivo escenario XML \n");
		}




	heroe=new cHeroe(heroeSprites,heroeAnimacionSprites);
	fantasma1=new cFantasma(fantasmaSprites,fantasmaAnimacionSprites);
	fantasma2=new cFantasma(fantasmaSprites,fantasmaAnimacionSprites);
	fantasma3=new cFantasma(fantasmaSprites,fantasmaAnimacionSprites);
	fantasma4=new cFantasma(fantasmaSprites,fantasmaAnimacionSprites);

	laberinto.CargarSprite ("laberinto.bmp");
	comidaSimple.CargarSprite ("comidasimple.bmp");
	comidaSuper.CargarSprite ("comidasuper.bmp");

puntos=0;
init();


}


void Pacman::init()
{

heroe->x=140;
heroe->y=230;
heroe->tendenciaX =14;
heroe->tendenciaY =23;
heroe->velocidad=2;
heroe->tendenciaMovimientoX=0;
heroe->tendenciaMovimientoY=0;

fantasma1->x=140;
fantasma1->y=110;
fantasma1->velocidad=2;
fantasma1->tendenciaX=14;
fantasma1->tendenciaY=11;
fantasma1->animacionMovimientoX=0;
fantasma1->animacionMovimientoY=0;

fantasma2->x=140;
fantasma2->y=110;
fantasma2->velocidad=2;
fantasma2->tendenciaX=14;
fantasma2->tendenciaY=11;
fantasma2->animacionMovimientoX=0;
fantasma2->animacionMovimientoY=0;

fantasma3->x=140;
fantasma3->y=110;
fantasma3->velocidad=2;
fantasma3->tendenciaX=14;
fantasma3->tendenciaY=11;
fantasma3->animacionMovimientoX=0;
fantasma3->animacionMovimientoY=0;

fantasma4->x=10;
fantasma4->y=10;
fantasma4->velocidad=2;
fantasma4->tendenciaX=1;
fantasma4->tendenciaY=1;
fantasma4->animacionMovimientoX=0;
fantasma4->animacionMovimientoY=0;








terrorfantasma=-1;
}




int Pacman::GameLoop()
{
vidas=5;
int Dificultad=0;
int heroeEstadoActual=-1;
int contadorTemor=0;
int proximaVida=3000;






 short matrizTemporal[32][28];

 memcpy(matrizTemporal,matrizColision,sizeof matrizColision);


estado=NIVELACTIVO;


		
	while(estado!=JUEGOTERMINADO)
	{

	

		if(estado==NIVELTERMINADO)
		{
			 memcpy(matrizColision,matrizTemporal,sizeof matrizTemporal);
			 estado=NIVELACTIVO;
			 init();

		}
		if(puntos>proximaVida)
		{
			vidas++;
			proximaVida+=puntos;
		}

	heroeEstadoActual=heroe->MovimientoHeroe(matrizColision);
		
			if(heroeEstadoActual==COMIDA)
			{
				puntos+=10;
		printf(" puntos  %d\n",puntos);

			}
			if(heroeEstadoActual==SUPERCOMIDA)
			{
	
				contadorTemor=300;
			}
			else
			{
				if(contadorTemor==0)
				{

					if(Dificultad==0)
					{
							fantasma1->MovimientoFantasma(heroe->tendenciaX,heroe->tendenciaY);

							fantasma2->MovimientoFantasma(heroe->tendenciaX,heroe->tendenciaY);

							fantasma3->MovimientoFantasma(heroe->tendenciaX,heroe->tendenciaY);
							fantasma4->MovimientoFantasma(heroe->tendenciaX,heroe->tendenciaY);

					}

						Dificultad++;
						if(Dificultad>rand()%3)
						Dificultad=0;

							if(fantasma1->tendenciaX==heroe->tendenciaX && heroe->tendenciaY==fantasma1->tendenciaY||
							   fantasma2->tendenciaX==heroe->tendenciaX && heroe->tendenciaY==fantasma2->tendenciaY||
							   fantasma3->tendenciaX==heroe->tendenciaX && heroe->tendenciaY==fantasma3->tendenciaY||
							   fantasma4->tendenciaX==heroe->tendenciaX && heroe->tendenciaY==fantasma4->tendenciaY)
							{
							vidas--;
							init();
							}

							if(vidas==0)
							{
								printf("perdiste :P");
							break;
							}
				}
				else 
				{
					fantasma1->MovimientoFantasmaConTemor(heroe->tendenciaX,heroe->tendenciaY);
					fantasma2->MovimientoFantasmaConTemor(heroe->tendenciaX,heroe->tendenciaY);
					fantasma3->MovimientoFantasmaConTemor(heroe->tendenciaX,heroe->tendenciaY);
					fantasma4->MovimientoFantasmaConTemor(heroe->tendenciaX,heroe->tendenciaY);
					contadorTemor--;

				}

			}
		
	  
		Dibujar();	
		SDL_Delay(8);
		}
	


	
return 0;
}




void Pacman::Dibujar()
{
	int i,j;
	LimpiarPantalla();

	int contador_comida=0;

	for(i=0;i<32;i++)
	for(j=0;j<28;j++)
	{
		if(matrizColision[i][j]==COMIDA)
		{
			contador_comida=1;
			comidaSimple.posicionX=j*10;
			comidaSimple.posicionY=i*10;
			PonerSdlSurface(comidaSimple.LeerSprite(),comidaSimple.posicionX,comidaSimple.posicionY);
		}
		if(matrizColision[i][j]==SUPERCOMIDA)
		{
			contador_comida=1;
			comidaSuper.posicionX=j*10;
			comidaSuper.posicionY=i*10;
			PonerSdlSurface(comidaSuper.LeerSprite(),comidaSuper.posicionX,comidaSuper.posicionY);
		}

	}
	if(contador_comida==0)
		estado=NIVELTERMINADO;



		PonerSdlSurface(heroe->ImagenADibujar().LeerSprite(),heroe->x,heroe->y);
		PonerSdlSurface(fantasma1->ImagenADibujar().LeerSprite(),fantasma1->x,fantasma1->y);
		PonerSdlSurface(fantasma2->ImagenADibujar().LeerSprite(),fantasma2->x,fantasma2->y);
		PonerSdlSurface(fantasma3->ImagenADibujar().LeerSprite(),fantasma3->x,fantasma3->y);
		PonerSdlSurface(fantasma4->ImagenADibujar().LeerSprite(),fantasma4->x,fantasma4->y);

		PonerSdlSurface(laberinto.LeerSprite(),laberinto.posicionX,laberinto.posicionY);



		ActualizarPantalla();
}
